gbuint32 argtype;
char *minvalue; /* minimum value for numeric options */
char *maxvalue; /* maximum value for numeric options */
+ char *argvalptr; /* !!! internal helper. Not used in definitions !!! */
} arglist_t;
typedef enum {
void disp_vec_options(const char *vecname, arglist_t *ap);
void disp_vecs(void);
void disp_vec( const char *vecname );
+void init_vecs(void);
void exit_vecs(void);
void disp_formats(int version);
const char * name_option(long type);
if ( fvec->args ) {
for ( ap = fvec->args; ap->argstring; ap++) {
- if (ap->argval && *ap->argval) {
- xfree(*ap->argval);
- *ap->argval = NULL;
+ if (ap->argvalptr) {
+ xfree(ap->argvalptr);
+ ap->argvalptr = *ap->argval = NULL;
}
}
}
}
+void
+init_filter_vecs(void)
+{
+ fl_vecs_t *vec = filter_vec_list;
+ while ( vec->vec ) {
+ arglist_t *ap;
+ if ( vec->vec->args ) {
+ for ( ap = vec->vec->args; ap->argstring; ap++ ) {
+ ap->argvalptr = NULL;
+ }
+ }
+ vec++;
+ }
+}
+
void
exit_filter_vecs( void )
{
vec++;
}
}
-
/*
* Display the available formats in a format that's easy for humans to
void disp_filter( const char *vecname );
void disp_filter_vec( const char *vecname );
void disp_filter_vecs(void);
+void init_filter_vecs(void);
void exit_filter_vecs(void);
global_opts.inifile = inifile_init(NULL, MYNAME);
}
+ init_vecs();
+ init_filter_vecs();
cet_register();
session_init();
waypt_init();
static double totalerror = 0;
static double error = 0;
-static char *countopt = NULL;
-static char *erroropt = NULL;
-static char *xteopt = NULL;
-static char *lenopt = NULL;
+static char *countopt;
+static char *erroropt;
+static char *xteopt;
+static char *lenopt;
void (*waypt_del_fnp) (route_head *rte, waypoint *wpt);
static
fatal( MYNAME ": crosstrack and length may not be used together.\n");
}
if ( !xteopt && !lenopt ) {
- xteopt = (char *)xmalloc( 1 );
+ xteopt = "";
}
if (countopt) {
}
};
+void
+init_vecs(void)
+{
+ vecs_t *vec = vec_list;
+ while ( vec->vec ) {
+ arglist_t *ap;
+ if ( vec->vec->args ) {
+ for ( ap = vec->vec->args; ap->argstring; ap++ ) {
+ ap->argvalptr = NULL;
+ if (ap->argval) *ap->argval = NULL;
+ }
+ }
+ vec++;
+ }
+}
+
void
exit_vecs( void )
{
! isdigit(ap->defaultvalue[0])) {
warning("%s: not an integer\n", ap->argstring);
}
- if ( ap->argval && *ap->argval ) {
- xfree(*ap->argval);
- *ap->argval = NULL;
+ if ( ap->argvalptr ) {
+ xfree(ap->argvalptr);
+ *ap->argval = ap->argvalptr = NULL;
}
}
}
{
char *c;
- if (*ap->argval != NULL) {
- xfree(*ap->argval);
- *ap->argval = NULL;
+ if (ap->argval == NULL)
+ fatal("%s: No local variable defined for option \"%s\"!", module, ap->argstring);
+
+ if (ap->argvalptr != NULL) {
+ xfree(ap->argvalptr);
+ ap->argvalptr = NULL;
}
+ if (ap->argval) *ap->argval = NULL;
+
if (val == NULL) return;
if (case_ignore_strcmp(val, ap->argstring) == 0) c = "";
(*c == '0') && (ap->defaultvalue == NULL)) {
return;
}
- *ap->argval = xstrdup(c);
+ *ap->argval = ap->argvalptr = xstrdup(c);
}
void